home *** CD-ROM | disk | FTP | other *** search
/ Day Cry / Day Cry CD.bin / oh_towns / taropyon / splib / splib.lzh / PRG / ZNSPLAY / ZNSPLAY.C < prev    next >
C/C++ Source or Header  |  1994-09-19  |  14KB  |  613 lines

  1. /*************************************************************************
  2. *    UGOKUZANSU PLAYER on system ügPrideüh version II
  3. *************************************************************************/
  4.  
  5. #include    <stdio.h>
  6. #include    <stdlib.h>
  7. #include    <string.h>
  8.  
  9. #include    <egb.h>
  10. #include    <snd.h>
  11.  
  12. #define    _ZNS_MAIN
  13. #include    "znsplay.h"
  14. #include    "../DLL/BGM/midi.h"
  15. #include    <fdl.h>
  16. #include    <MNU/mnu010.h>    /* âüâjâàü[ÉFÉ▌ÆΦ    */
  17.  
  18. ZNSMOVE_T    ZnsMove =
  19. {
  20.     ZNS_MODE_MEMORY,    /* mode        */
  21.     0,                    /* wait        */
  22.     2,                    /* expand    */
  23.     -1,                    /* type        */
  24.     ""                    /* filename    */
  25. };
  26. FDL_T        *ZnsFdl = NULL;    /* âtâ@âCâïâ_âCâAâìâO        */
  27. FDL_T        *BgmFdl = NULL;    /* BGMùpâtâ@âCâïâ_âCâAâìâO    */
  28.  
  29. enum    _main_evt
  30. {
  31.     _EVT_NOTHING,
  32.     _EVT_SIDEWORK,
  33.     _EVT_MAIN_EXIT,
  34.     _EVT_NUM,
  35. };
  36.  
  37. /*    âVâXâeâÇìsé╔Åεò±ò\Ī    */
  38. void    zns_dsp_info(void)
  39. {
  40.     if ( ZnsMove.filename[0] == '\0' )
  41.     {
  42.         SYL_clear();
  43.         return;
  44.     }
  45.  
  46.     char        tmp[128];
  47.  
  48.     FS_getFnamPath(tmp,ZnsMove.filename );
  49.     DSP_writePage(1);
  50.     SYL_puts( C_INFO, "filename:%-12s wait:%2d, display:ü~%d, mode:%s",
  51.         tmp,
  52.         ZnsMove.wait,
  53.         ZnsMove.expand,
  54.         ZnsMove.mode == ZNS_MODE_MEMORY ? "memory": "disk"
  55.     );
  56. }
  57.  
  58. /* âüâjâàü[ùpé╠âJâëü[âeü[âuâïÉ▌ÆΦ    */
  59. void    setMenuCol( MNU_T *mnu )
  60. {
  61.     if ( mnu )
  62.     {
  63.         MNUCOL_TIT(mnu) = C_GRAY0;
  64.         MNUCOL_STR(mnu) = C_METAL2;
  65.         MNUCOL_BAC(mnu) = C_GRAY0;
  66.         MNUCOL_BTN(mnu) = DspCtrl.black;
  67.         MNUCOL_PSH(mnu) = C_GRAY1;
  68.         MNUCOL_HIL(mnu) = C_GRAY3;
  69.         MNUCOL_SHA(mnu) = C_GRAY1;
  70.         MNUCOL_IGN(mnu) = C_GRAY1;
  71.     }
  72. }
  73.  
  74. /*************************************************************************
  75. *    about ZNSPLAY
  76. *************************************************************************/
  77.  
  78. int        APL_about(int evtNo, EVTSBJ_T *sbj)
  79. {
  80.     char    ver[32];
  81.  
  82.     sprintf( ver, "%s edition #%s", MAIN_VER, EDITION_NUMBER );
  83.     Apl_dlgMsg( 8, 32, ver, _ZNSPLAY_,
  84.         "%s %s compiled.\n(C)Copyright 1993, H.Toda & TaroPYON\n",
  85.         __DATE__, __TIME__ );
  86.     return (_EVT_NOTHING);
  87. }
  88.  
  89. static UINT        get_freemem(void)    /* âüâéâèùeù╩é≡Æ▓é╫éΘ    */
  90. {
  91.     int        mx;
  92.     UINT    sz, fm;
  93. #define    TBL_MAX    (256)
  94.     char    *dmy[TBL_MAX];
  95.  
  96.     for ( sz = 0x100000, fm = mx = 0 ; mx < TBL_MAX; ++mx )
  97.     {
  98.         while ( (dmy[mx] = malloc((size_t)sz)) == NULL )
  99.         {    if ( (sz /= 2) < 0x100 )
  100.                 break;
  101.         }
  102.         if ( dmy[mx] == NULL )
  103.             break;
  104.         fm += sz;
  105.     }
  106.     while ( mx > 0 )
  107.         free( dmy[--mx] );
  108.     return    (fm);
  109. }
  110.  
  111. /*************************************************************************
  112. *    âtâèü[âüâéâèé╠ò\Ī
  113. *************************************************************************/
  114. int        APL_freeMem(int evtNo, EVTSBJ_T *sbj)
  115. {
  116.     UINT    f;
  117.     char    tmp[32];
  118.  
  119.     f = get_freemem();
  120.     GetSizeStr(f,tmp);
  121.     DLG_tmpMsgBox (
  122.         sbj->ev.mos.fr.x2, sbj->ev.mos.fr.y1,
  123.         DspCtrl.black, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
  124.         " Free memory size %u (%s) byte(s) ", f, tmp );
  125.  
  126.     return (_EVT_NOTHING);
  127. }
  128.  
  129. /*************************************************************************
  130. *    âTâCâhâÅü[âN
  131. *************************************************************************/
  132. int        APL_sidework(int evtNo, EVTSBJ_T *sbj)
  133. {
  134.     extern    int        SideWorkMenu(void);
  135.  
  136.     SideWorkMenu();
  137.     return (_EVT_NOTHING);
  138. }
  139.  
  140. /*************************************************************************
  141. *    [SYSTEM]
  142. *************************************************************************/
  143. static    int        ZNS_system( int evtNo, EVTSBJ_T *sbj )
  144. {
  145.     enum    _mnu_ar
  146.     {    _ABOUT,    _FREE,    _SIDEWORK,    _E_NUM
  147.     };
  148.     static    MNUOBJ_T        obj[_E_NUM] =
  149.     {
  150.         { MNU_NOR, 'A', "About ZNSPLAY", NULL, 0, APL_about   , NULL },
  151.         { MNU_NOR, 'F', "Free memory"  , NULL, 0, APL_freeMem , NULL },
  152.         { MNU_NOR, 'S', "Sidework"     , NULL, 0, APL_sidework, NULL },
  153.     };
  154.     MNU_T    *mnu;
  155.     int        x0, y0;
  156.  
  157.     x0 = sbj->ev.mos.fr.x1;
  158.     y0 = sbj->ev.mos.fr.y1;
  159.  
  160.     mnu = MNU_open( x0, y0, MNUATT_EXIT, _E_NUM, obj, _SYSTEM_ );
  161.     if ( mnu == NULL )
  162.         return (EVT_BREAK);
  163.     setMenuCol( mnu );
  164.     evtNo = MNU_start ( mnu );
  165.     MNU_close(mnu);
  166.  
  167.     return (evtNo);
  168. }
  169.  
  170. /*************************************************************************
  171. *    âtâ@âCâïâIü[âvâô
  172. *************************************************************************/
  173. int        ZNS_open(void)
  174. {
  175.     int            ret;
  176.     FDL_T        *fdl;
  177.     char        *filename;
  178.  
  179.     DSP_writePage(1);
  180.     if ( (fdl = ZnsFdl) == NULL )
  181.     {
  182.         if ( (fdl = FDL_open(0)) == NULL )
  183.         {    /* error */
  184.             return    (_EVT_NOTHING);
  185.         }
  186.         FDL_set_title( fdl, _ZNSPLAY_);
  187.         FDL_set_wildcard( fdl, ZNS_WILD_ALL );
  188.         ZnsFdl = fdl;
  189.     }
  190.  
  191.     KBF_clear();
  192.     if( (ret = FDL_start( fdl )) == NORMAL )
  193.     {
  194.         filename = FDL_get_filename(fdl);
  195.         if ( *filename == '\0' )
  196.             return    (_EVT_NOTHING);
  197.     } else
  198.         return    (_EVT_NOTHING);
  199.     strcpy( ZnsMove.filename, filename );
  200.     zns_dsp_info();
  201.  
  202.     return    (_EVT_NOTHING);
  203. }
  204.  
  205. /*************************************************************************
  206. *    ì─É╢
  207. *************************************************************************/
  208. int        zns_play( ZNSMOVE_T *znsmove )
  209. {
  210.     int            i;
  211.     char        sub[128];
  212.     static struct
  213.     {    CONST char    sub[4];
  214.         int            typ;
  215.     } subtbl[] =
  216.     {
  217.         {"mov",    ZNS_TYP_MOV},
  218.         {"v00",    ZNS_TYP_V00},
  219.         {"v02",    ZNS_TYP_V02},
  220.     };
  221.  
  222.     FS_getSnam( sub, ZnsMove.filename );
  223.  
  224.     znsmove->type = -1;
  225.     for ( i = 0; i < sizeof(subtbl)/sizeof(*subtbl); ++i )
  226.     {
  227.         if ( strcmpi( sub, subtbl[i].sub) == 0 )
  228.         {
  229.             znsmove->type =  subtbl[i].typ;
  230.             break;
  231.         }
  232.     }
  233.     if ( znsmove->type < 0 )
  234.         return (ERR);
  235.  
  236.     if ( znsmove->mode == ZNS_MODE_DISK )
  237.     {    /* âfâBâXâNì─É╢âéü[âhé┼é═BGM ÆΓÄ~    */
  238.         MID_playStop();
  239.     }
  240.  
  241.     MOS_COFF();
  242.  
  243.     /* â~âàü[âgë≡Å£    */
  244.     int        mute;
  245.     SND_get_elevol_mute(&mute);
  246.     SND_elevol_mute(mute | 3);
  247.  
  248.     switch( znsmove->type )
  249.     {
  250.         case    ZNS_TYP_MOV:
  251.         {
  252.             zns_play_mov( znsmove );
  253.             break;
  254.         }
  255.         case    ZNS_TYP_V00:
  256.         case    ZNS_TYP_V02:
  257.         {
  258.             zns_play_v02( znsmove );
  259.             break;
  260.         }
  261.     }
  262.  
  263.     /* â~âàü[âgÉ▌ÆΦ    */
  264.     SND_elevol_mute(mute & (~3));
  265.  
  266.     return (NORMAL);
  267. }
  268.  
  269. /*************************************************************************
  270. *    ì─É╢
  271. *************************************************************************/
  272. int        ZNS_play(void)
  273. {
  274.  
  275.     if ( ZnsMove.filename[0] == '\0' )
  276.         return    (_EVT_NOTHING);
  277.  
  278.     if ( FS_isFileExist(ZnsMove.filename) != FS_EXIST_FILE )
  279.     {    /* File not found */
  280.         return    (_EVT_NOTHING);
  281.     }
  282.     zns_play ( &ZnsMove );
  283.  
  284.     return    (_EVT_NOTHING);
  285. }
  286.  
  287.  
  288. /*************************************************************************
  289. *    [MENU]
  290. *************************************************************************/
  291. static    int        ZNS_menu( int evtNo, EVTSBJ_T *sbj )
  292. {
  293.     enum    _mnu_ar
  294.     {    _MENU_OPEN,    _MENU_PLAY,    _MENU_NUM
  295.     };
  296.     static    MNUOBJ_T        obj[_MENU_NUM] =
  297.     {
  298.         { MNU_NOR, 'O', "Open" , NULL, _MENU_OPEN, (int (*)())0, NULL },
  299.         { MNU_NOR, 'P', "Play" , NULL, _MENU_PLAY, (int (*)())0, NULL },
  300.     };
  301.     MNU_T    *mnu;
  302.     int        x0, y0;
  303.  
  304.     x0 = sbj->ev.mos.fr.x1;
  305.     y0 = sbj->ev.mos.fr.y1;
  306.  
  307.     mnu = MNU_open( x0, y0, MNUATT_EXIT, _MENU_NUM, obj, "MENU" );
  308.     if ( mnu == NULL )
  309.         return (EVT_BREAK);
  310.     setMenuCol( mnu );
  311.     evtNo = MNU_start ( mnu );
  312.     MNU_close(mnu);
  313.     switch ( evtNo )
  314.     {    case    _MENU_OPEN:    evtNo = ZNS_open();    break;
  315.         case    _MENU_PLAY:    evtNo = ZNS_play();    break;
  316.     }
  317.  
  318.     return (evtNo);
  319. }
  320.  
  321. /*************************************************************************
  322. *    [SETUP]
  323. *************************************************************************/
  324. static    int        ZNS_setup( int evtNo, EVTSBJ_T *sbj )
  325. {
  326.     enum    _mnu_ar
  327.     {    _MENU_MODE, _MENU_WAIT,    _MENU_EXPAND,    _MENU_NUM
  328.     };
  329.     static    MNUOBJ_T        obj[_MENU_NUM] =
  330.     {
  331.         { MNU_STR, 'M', "Mode  %s"      , NULL, _MENU_MODE  , (int (*)())0, NULL },
  332.         { MNU_DIG, 'W', "Wait     [%2d]", NULL, _MENU_WAIT  , (int (*)())0, NULL },
  333.         { MNU_DIG, 'D', "Display [ü~%d]", NULL, _MENU_EXPAND, (int (*)())0, NULL },
  334.     };
  335.     MNU_T    *mnu;
  336.     int        x0, y0;
  337.  
  338.     x0 = sbj->ev.mos.fr.x1;
  339.     y0 = sbj->ev.mos.fr.y1;
  340.  
  341.     mnu = MNU_open( x0, y0, MNUATT_EXIT, _MENU_NUM, obj, _SETUP_ );
  342.     if ( mnu == NULL )
  343.         return (EVT_BREAK);
  344.     setMenuCol( mnu );
  345.     do
  346.     {
  347.         obj[_MENU_MODE  ].para = ZnsMove.mode == ZNS_MODE_MEMORY ? "[memory]" : "  [disk]";
  348.         obj[_MENU_WAIT  ].para = (void *)(ZnsMove.wait);
  349.         obj[_MENU_EXPAND].para = (void *)(ZnsMove.expand);
  350.  
  351.